add_package()

py_library(
  NAME
    api
  DEPS
    .config
    .io
    .load_pytd
    pytype.errors.errors
)

toplevel_py_binary(
  NAME
    pytype-single
  SRCS
    main.py
  MAIN
    main.py
  DEPS
    .main
)

py_library(
  NAME
    utils
  DEPS
    ._utils
    .datatypes
    .file_utils
    .imports_map
    .metrics
    .module_utils
    .pytype_source_utils
)

py_library(
  NAME
    config
  SRCS
    config.py
  DEPS
    ._utils
    .datatypes
    .file_utils
    .imports_map_loader
    .module_utils
    pytype.errors.errors
    pytype.pyc.pyc
    pytype.typegraph.cfg_utils
)

py_library(
  NAME
    load_pytd
  SRCS
    load_pytd.py
  DEPS
    .file_utils
    .module_utils
    pytype.imports.imports
    pytype.platform_utils.platform_utils
    pytype.pyi.parser
    pytype.pytd.pytd
)

py_library(
  NAME
    imports_map
  SRCS
    imports_map.py
)

py_library(
  NAME
    imports_map_loader
  SRCS
    imports_map_loader.py
  DEPS
    .imports_map
    pytype.platform_utils.platform_utils
)

py_library(
  NAME
    libvm
  DEPS
    .__version__
    .analyze
    .annotation_utils
    .attribute
    .block_environment
    .compare
    .config
    .context
    .convert
    .convert_structural
    .debug
    .imports_map_loader
    .io
    .load_pytd
    .matcher
    .output
    .pattern_matching
    .state
    .tracer_vm
    .vm
    pytype.directors.directors
    pytype.errors.errors
)

py_library(
  NAME
    pretty_printer_base
  SRCS
    pretty_printer_base.py
  DEPS
    pytype.pytd.pytd
    pytype.types.types
)

py_library(
  NAME
    pretty_printer
  SRCS
    pretty_printer.py
  DEPS
    .pretty_printer_base
    pytype.abstract.abstract
    pytype.pytd.pytd
    pytype.typegraph.cfg
    pytype.types.types
)

filegroup(
  NAME
    test_data
  SRCS
    test_data/__init__.py
    test_data/bad.py
    test_data/bad.pyi
    test_data/complex.py
    test_data/complex.pyi
    test_data/constant.py
    test_data/imports.py
    test_data/imports.pyi
    test_data/perf/__init__.py
    test_data/perf/functions_dict.py
    test_data/perf/iso.py
    test_data/pytree.py
    test_data/simple.py
    test_data/simple.pyi
    test_data/syntax.py
    test_data/tokenerror1.py
    test_data/tokenerror2.py
    test_data/tokenize.py
    test_data/yield_from.py
)

py_library(
  NAME
    analyze
  SRCS
    analyze.py
  DEPS
    .context
    .convert_structural
    .debug
    .metrics
    pytype.abstract.abstract
    pytype.pytd.pytd
)

py_library(
  NAME
    annotation_utils
  SRCS
    annotation_utils.py
  DEPS
    ._utils
    .state
    pytype.abstract.abstract
    pytype.overlays.overlays
    pytype.pytd.pytd
    pytype.typegraph.cfg
    pytype.types.types
)

py_library(
  NAME
    attribute
  SRCS
    attribute.py
  DEPS
    ._utils
    .datatypes
    pytype.abstract.abstract
    pytype.errors.error_types
    pytype.overlays.overlays
    pytype.typegraph.cfg
)

py_library(
  NAME
    compare
  SRCS
    compare.py
  DEPS
    pytype.abstract.abstract
    pytype.pytd.pytd
)

py_library(
  NAME
    constant_folding
  SRCS
    constant_folding.py
  DEPS
    pytype.blocks.blocks
    pytype.pyc.pyc
)

py_library(
  NAME
    convert
  SRCS
    convert.py
  DEPS
    ._utils
    .datatypes
    pytype.abstract.abstract
    pytype.blocks.blocks
    pytype.overlays.overlays
    pytype.pyi.parser
    pytype.pytd.pytd
    pytype.typegraph.cfg
)

py_library(
  NAME
    context
  SRCS
    context.py
  DEPS
    .annotation_utils
    .attribute
    .config
    .convert
    .load_pytd
    .matcher
    .output
    .pretty_printer
    .tracer_vm
    .vm_utils
    pytype.abstract.abstract
    pytype.errors.errors
    pytype.overlays.overlays
    pytype.typegraph.cfg
    pytype.typegraph.cfg_utils
)

py_library(
  NAME
    convert_structural
  SRCS
    convert_structural.py
  DEPS
    pytype.pytd.pytd
)

py_library(
  NAME
    datatypes
  SRCS
    datatypes.py
)

py_library(
  NAME
    debug
  SRCS
    debug.py
  DEPS
    ._utils
    pytype.typegraph.cfg_utils
)

py_library(
  NAME
    block_environment
  SRCS
    block_environment.py
  DEPS
    pytype.blocks.blocks
    pytype.typegraph.cfg
)

py_library(
  NAME
    file_utils
  SRCS
    file_utils.py
  DEPS
    pytype.platform_utils.platform_utils
)

py_library(
  NAME
    io
  SRCS
    io.py
  DEPS
    .__version__
    ._utils
    .analyze
    .config
    .constant_folding
    .context
    .load_pytd
    pytype.directors.directors
    pytype.imports.imports
    pytype.pyc.pyc
    pytype.pyi.parser
    pytype.pytd.pytd
    pytype.rewrite.rewrite
)

py_library(
  NAME
    main
  DEPS
    ._utils
    .config
    .io
    .load_pytd
    .metrics
    pytype.imports.imports
    pytype.pytd.pytd
    pytype.pytd.parse.parse
)

py_library(
  NAME
    matcher
  SRCS
    matcher.py
  DEPS
    ._utils
    .datatypes
    pytype.abstract.abstract
    pytype.errors.error_types
    pytype.overlays.overlays
    pytype.pytd.pytd
    pytype.typegraph.cfg
    pytype.types.types
)

py_library(
  NAME
    metrics
  SRCS
    metrics.py
)

py_library(
  NAME
    module_utils
  SRCS
    module_utils.py
  DEPS
    pytype.platform_utils.platform_utils
)

py_library(
  NAME
    output
  SRCS
    output.py
  DEPS
    ._utils
    pytype.abstract.abstract
    pytype.overlays.overlays
    pytype.pyi.parser
    pytype.pytd.pytd
)

py_library(
  NAME
    overriding_checks
  SRCS
    overriding_checks.py
  DEPS
    pytype.abstract.abstract
    pytype.pytd.pytd
)

py_library(
  NAME
    pattern_matching
  SRCS
    pattern_matching.py
  DEPS
    pytype.abstract.abstract
    pytype.pyc.pyc
    pytype.pytd.pytd
    pytype.typegraph.cfg
)

py_library(
  NAME
    preprocess
  SRCS
    preprocess.py
)

py_library(
  NAME
    pytype_source_utils
  SRCS
    pytype_source_utils.py
  DEPS
    pytype.platform_utils.platform_utils
    pytype.stubs.stubs
)

py_library(
  NAME
    state
  SRCS
    state.py
  DEPS
    ._utils
    .compare
    .metrics
    .module_utils
    pytype.abstract.abstract
    pytype.blocks.blocks
    pytype.directors.directors
    pytype.typegraph.cfg
)

py_library(
  NAME
    tracer_vm
  SRCS
    tracer_vm.py
  DEPS
    .state
    .vm
    pytype.abstract.abstract
    pytype.overlays.overlays
    pytype.pytd.pytd
    pytype.typegraph.cfg
)

py_library(
  NAME
    _utils
  SRCS
    utils.py
  DEPS
    pytype.platform_utils.platform_utils
)

py_library(
  NAME
    __version__
  SRCS
    __version__.py
)

py_library(
  NAME
    vm
  SRCS
    __init__.py
    vm.py
  DEPS
    .block_environment
    .compare
    .constant_folding
    .datatypes
    .load_pytd
    .metrics
    .pattern_matching
    .preprocess
    .state
    .vm_utils
    pytype.abstract.abstract
    pytype.blocks.blocks
    pytype.directors.directors
    pytype.overlays.overlays
    pytype.pyc.pyc
    pytype.pyi.parser
    pytype.pytd.pytd
    pytype.typegraph.cfg
    pytype.typegraph.cfg_utils
)

py_library(
  NAME
    vm_utils
  SRCS
    vm_utils.py
  DEPS
    ._utils
    .overriding_checks
    .state
    pytype.abstract.abstract
    pytype.blocks.blocks
    pytype.directors.directors
    pytype.errors.error_types
    pytype.overlays.overlays
    pytype.pyc.pyc
    pytype.pytd.pytd
    pytype.typegraph.cfg
)

py_test(
  NAME
    typegraph_metrics_test
  SRCS
    typegraph_metrics_test.py
  DEPS
    .context
    .vm
    pytype.errors.errors
    pytype.tests.test_base
    pytype.typegraph.cfg
)

py_test(
  NAME
    config_test
  SRCS
    config_test.py
  DEPS
    ._utils
    .config
)

py_test(
  NAME
    datatypes_test
  SRCS
    datatypes_test.py
  DEPS
    .datatypes
    pytype.typegraph.cfg
)

py_test(
  NAME
    io_test
  SRCS
    io_test.py
  DEPS
    .config
    .file_utils
    .io
    pytype.platform_utils.platform_utils
    pytype.pytd.pytd
    pytype.tests.test_utils
)

py_test(
  NAME
    file_utils_test
  SRCS
    file_utils_test.py
  DEPS
    .file_utils
    pytype.platform_utils.platform_utils
    pytype.tests.test_base
)

py_test(
  NAME
    module_utils_test
  SRCS
    module_utils_test.py
  DEPS
    .file_utils
    .module_utils
    pytype.platform_utils.platform_utils
)

py_test(
  NAME
    pytype_source_utils_test
  SRCS
    pytype_source_utils_test.py
  DEPS
    .pytype_source_utils
    pytype.platform_utils.platform_utils
)

py_test(
  NAME
    utils_test
  SRCS
    utils_test.py
  DEPS
    ._utils
)

py_test(
  NAME
    compare_test
  SRCS
    compare_test.py
  DEPS
    .compare
    .config
    .context
    .load_pytd
    pytype.abstract.abstract
    pytype.errors.errors
    pytype.errors.error_types
    pytype.pytd.pytd
    pytype.tests.test_base
)

py_test(
  NAME
    matcher_test
  SRCS
    matcher_test.py
  DEPS
    .config
    pytype.abstract.abstract
    pytype.errors.error_types
    pytype.tests.test_base
    pytype.types.types
)

py_test(
  NAME
    convert_test
  SRCS
    convert_test.py
  DEPS
    .config
    pytype.abstract.abstract
    pytype.pytd.pytd
    pytype.tests.test_base
)

py_test(
  NAME
    attribute_test
  SRCS
    attribute_test.py
  DEPS
    .config
    .context
    .load_pytd
    pytype.abstract.abstract
    pytype.errors.errors
    pytype.tests.test_base
)

py_test(
  NAME
    block_environment_test
  SRCS
    block_environment_test.py
  DEPS
    .block_environment
)

py_test(
  NAME
    constant_folding_test
  SRCS
    constant_folding_test.py
  DEPS
    .config
    .constant_folding
    .context
    .load_pytd
    .state
    pytype.abstract.abstract
    pytype.blocks.blocks
    pytype.directors.directors
    pytype.errors.errors
    pytype.pyc.pyc
    pytype.pytd.pytd
    pytype.tests.test_base
)

py_test(
  NAME
    vm_test
  SRCS
    vm_test.py
  DEPS
    .context
    .vm
    pytype.tests.test_base
)

py_test(
  NAME
    load_pytd_test
  SRCS
    load_pytd_test.py
  DEPS
    .config
    .file_utils
    .imports_map
    .load_pytd
    .module_utils
    pytype.imports.imports
    pytype.platform_utils.platform_utils
    pytype.pytd.pytd
    pytype.stubs.stubs
    pytype.tests.test_base
)

py_test(
  NAME
    imports_map_loader_test
  SRCS
    imports_map_loader_test.py
  DEPS
    .file_utils
    .imports_map_loader
    pytype.platform_utils.platform_utils
    pytype.stubs.stubs
    pytype.tests.test_base
)

py_test(
  NAME
    metrics_test
  SRCS
    metrics_test.py
  DEPS
    .metrics
    pytype.platform_utils.platform_utils
)

py_test(
  NAME
    state_test
  SRCS
    state_test.py
  DEPS
    .compare
    .state
    pytype.typegraph.cfg
)

py_test(
  NAME
    debug_test
  SRCS
    debug_test.py
  DEPS
    .debug
    pytype.typegraph.cfg
)

py_test(
  NAME
    pretty_printer_test
  SRCS
    pretty_printer_test.py
  DEPS
    .config
    .pretty_printer
    pytype.abstract.abstract
    pytype.pytd.pytd
    pytype.tests.test_base
)

add_subdirectory(abstract)
add_subdirectory(ast)
add_subdirectory(blocks)
add_subdirectory(directors)
add_subdirectory(errors)
add_subdirectory(imports)
add_subdirectory(inspect)
add_subdirectory(overlays)
add_subdirectory(platform_utils)
add_subdirectory(pyc)
add_subdirectory(pyi)
add_subdirectory(pytd)
add_subdirectory(rewrite)
add_subdirectory(stubs)
add_subdirectory(tests)
add_subdirectory(tools)
add_subdirectory(typegraph)
add_subdirectory(types)
